home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / yelp / xslt / man2html.xsl < prev    next >
Extensible Markup Language  |  2009-10-15  |  12KB  |  405 lines

  1. <?xml version='1.0' encoding='UTF-8'?><!-- -*- indent-tabs-mode: nil -*- -->
  2.  
  3. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  4.                 xmlns:yelp="http://www.gnome.org/yelp/ns"
  5.                 xmlns="http://www.w3.org/1999/xhtml"
  6.                 extension-element-prefixes="yelp"
  7.                 version="1.0">
  8.  
  9. <xsl:output method="html" encoding="UTF-8"/>
  10.  
  11. <xsl:include href="yelp-common.xsl"/>
  12.  
  13. <xsl:param name="stylesheet_path" select="''"/>
  14. <xsl:param name="linktrail"/>
  15.  
  16. <xsl:param name="yelp.javascript"/>
  17.  
  18. <xsl:param name="yelp.icon.blockquote"/>
  19. <xsl:param name="yelp.icon.caution"/>
  20. <xsl:param name="yelp.icon.important"/>
  21. <xsl:param name="yelp.icon.note"/>
  22. <xsl:param name="yelp.icon.programlisting"/>
  23. <xsl:param name="yelp.icon.tip"/>
  24. <xsl:param name="yelp.icon.warning"/>
  25.  
  26. <xsl:param name="theme.color.text"/>
  27. <xsl:param name="theme.color.background"/>
  28. <xsl:param name="theme.color.text_light"/>
  29. <xsl:param name="theme.color.link"/>
  30. <xsl:param name="theme.color.link_visited"/>
  31. <xsl:param name="theme.color.gray_background"/>
  32. <xsl:param name="theme.color.gray_border"/>
  33. <xsl:param name="theme.color.blue_background"/>
  34. <xsl:param name="theme.color.blue_border"/>
  35. <xsl:param name="theme.color.red_background"/>
  36. <xsl:param name="theme.color.red_border"/>
  37. <xsl:param name="theme.color.yellow_background"/>
  38. <xsl:param name="theme.color.yellow_border"/>
  39.  
  40. <xsl:template match="Man">
  41.   <xsl:choose>
  42.     <xsl:when test="element-available('yelp:document')">
  43.       <yelp:document href="index">
  44.         <xsl:call-template name="html"/>
  45.       </yelp:document>
  46.     </xsl:when>
  47.     <xsl:otherwise>
  48.       <xsl:call-template name="html"/>
  49.     </xsl:otherwise>
  50.   </xsl:choose>
  51. </xsl:template>
  52.  
  53. <xsl:template name="html">
  54.   <html>
  55.     <head>
  56.       <title>
  57.         <xsl:value-of select="//TH/Title"/>
  58.       </title>
  59.       <style type="text/css">
  60.         <xsl:call-template name="html.css"/>
  61.       </style>
  62.       <script type="text/javascript">
  63.         <xsl:attribute name="src">
  64.           <xsl:value-of select="concat('file://', $yelp.javascript)"/>
  65.         </xsl:attribute>
  66.       </script>
  67.     </head>
  68.     <body>
  69.       <xsl:call-template name="html.linktrail"/>
  70.       <div class="body">
  71.         <xsl:apply-templates select="TH"/>
  72.         <xsl:apply-templates select="SH"/>
  73.       </div>
  74.     </body>
  75.   </html>
  76. </xsl:template>
  77.  
  78. <xsl:template name="html.css">
  79.   <xsl:call-template name="yelp.common.css"/>
  80.   <xsl:text>
  81.     div[class~="SH"] { margin-left: 1.2em; }
  82.     div[class~="SS"] { margin-left: 1.6em; }
  83.  
  84.     span[class~="R"] { font-family: serif; }
  85.     span[class~="Section"] { margin-left: 0.4em; }
  86.   
  87.     dd { padding-bottom: 10px; }
  88.   </xsl:text>
  89. </xsl:template>
  90.  
  91. <xsl:template name="html.linktrail">
  92.   <div class="linktrail" id="linktrail">
  93.     <xsl:call-template name="html.linktrail.one">
  94.       <xsl:with-param name="str" select="$linktrail"/>
  95.     </xsl:call-template>
  96.   </div>
  97. </xsl:template>
  98.  
  99. <xsl:template name="html.linktrail.one">
  100.   <xsl:param name="str"/>
  101.   <xsl:variable name="id" select="substring-before($str, '|')"/>
  102.   <xsl:variable name="post_id" select="substring-after($str, '|')"/>
  103.  
  104.   <span class="linktrail">
  105.     <a class="linktrail" href="x-yelp-toc:{$id}">
  106.       <xsl:choose>
  107.         <xsl:when test="contains($post_id, '|')">
  108.           <xsl:value-of select="substring-before($post_id, '|')"/>
  109.         </xsl:when>
  110.         <xsl:otherwise>
  111.           <xsl:value-of select="$post_id"/>
  112.         </xsl:otherwise>
  113.       </xsl:choose>
  114.     </a>
  115.   </span>
  116.  
  117.   <xsl:if test="contains($post_id, '|')">
  118.     <xsl:call-template name="html.linktrail.one">
  119.       <xsl:with-param name="str" select="substring-after($post_id, '|')"/>
  120.     </xsl:call-template>
  121.   </xsl:if>
  122. </xsl:template>
  123.  
  124. <!-- ======================================================================= -->
  125.  
  126. <xsl:template match="br">
  127.   <xsl:apply-templates/><br/>
  128. </xsl:template>
  129.  
  130. <!-- ignore anything in the Indent,Count,sp element for now -->
  131. <xsl:template match="Indent" />
  132. <xsl:template match="Count" />
  133. <xsl:template match="sp" />
  134.  
  135. <xsl:template match="B | fB">
  136.   <b><xsl:apply-templates/></b>
  137. </xsl:template>
  138.  
  139. <xsl:template match="CELL">
  140.   <td><xsl:apply-templates/></td>
  141. </xsl:template>
  142.  
  143. <xsl:template match="I | fI">
  144.   <i><xsl:apply-templates/></i>
  145. </xsl:template>
  146.  
  147. <xsl:template match="R | fR">
  148.   <span class="R"><xsl:apply-templates/></span>
  149. </xsl:template>
  150.  
  151. <xsl:template match="Verbatim">
  152.   <pre>
  153.     <xsl:choose>
  154.       <xsl:when test="node()[1]/self::text()">
  155.         <xsl:variable name="node" select="node()[1]"/>
  156.         <xsl:choose>
  157.           <xsl:when test="starts-with(string($node), ' ')">
  158.             <xsl:value-of select="substring-after(string($node), ' ')"/>
  159.             <xsl:apply-templates select="node()[position() != 1]"/>
  160.           </xsl:when>
  161.           <xsl:otherwise>
  162.             <xsl:value-of select="string($node)"/>
  163.             <xsl:apply-templates select="node()[position() != 1]"/>
  164.           </xsl:otherwise>
  165.         </xsl:choose>
  166.       </xsl:when>
  167.       <xsl:otherwise>
  168.         <xsl:apply-templates />
  169.       </xsl:otherwise>
  170.     </xsl:choose>
  171.   </pre>
  172. </xsl:template>
  173.  
  174. <xsl:template match="IP">
  175.   <xsl:choose>
  176.     <xsl:when test="preceding-sibling::*[1][self::IP]"/>
  177.     <xsl:otherwise>
  178.       <dl>
  179.         <xsl:apply-templates mode="IP.mode" select="."/>
  180.       </dl>
  181.     </xsl:otherwise>
  182.   </xsl:choose>
  183. </xsl:template>
  184.  
  185. <xsl:template mode="IP.mode" match="IP">
  186.   <dt>
  187.     <xsl:choose>
  188.       <xsl:when test="Tag">
  189.         <xsl:apply-templates select="Tag"/>
  190.       </xsl:when>
  191.       <xsl:otherwise>
  192.         <xsl:apply-templates/>
  193.       </xsl:otherwise>
  194.     </xsl:choose>
  195.   </dt>
  196.   <dd>
  197.     <xsl:apply-templates select="Tag/following-sibling::node()"/>
  198.   </dd>
  199.   <xsl:apply-templates mode="IP.mode"
  200.                        select="following-sibling::*[1][self::IP]"/>
  201. </xsl:template>
  202.  
  203. <xsl:template match="P">
  204.   <p><xsl:apply-templates/></p>
  205. </xsl:template>
  206.  
  207. <xsl:template match="ROW">
  208.   <tr><xsl:apply-templates/></tr>
  209. </xsl:template>
  210.  
  211. <xsl:template match="SS">
  212.   <xsl:variable name="nextSH" select="following-sibling::SH[1]"/>
  213.   <xsl:variable name="nextSS"
  214.                 select="following-sibling::SS[not($nextSH) or
  215.                                               following-sibling::SH[1] = $nextSH][1]"/>
  216.   <h3><xsl:apply-templates/></h3>
  217.   <div class="SS">
  218.     <xsl:choose>
  219.       <xsl:when test="$nextSS">
  220.         <xsl:apply-templates
  221.          select="following-sibling::*[following-sibling::SS[1] = $nextSS and 
  222.                                       following-sibling::SS[1]/@id = $nextSS/@id]"/>
  223.       </xsl:when>
  224.       <xsl:when test="$nextSH">
  225.         <xsl:apply-templates
  226.          select="following-sibling::*[following-sibling::SH[1] = $nextSH and
  227.                                       following-sibling::SH[1]/@id = $nextSH/@id]"/>
  228.       </xsl:when>
  229.       <xsl:otherwise>
  230.         <xsl:apply-templates select="following-sibling::*"/>
  231.       </xsl:otherwise>
  232.     </xsl:choose>
  233.   </div>
  234. </xsl:template>
  235.  
  236. <xsl:template match="SH">
  237.   <xsl:variable name="nextSH" select="following-sibling::SH[1]"/>
  238.   <xsl:variable name="nextSS"
  239.                 select="following-sibling::SS[not($nextSH) or
  240.                                               following-sibling::SH[1] = $nextSH]"/>
  241.   <h2><xsl:apply-templates/></h2>
  242.   <div class="SH">
  243.     <xsl:choose>
  244.       <xsl:when test="$nextSS">
  245.         <xsl:apply-templates
  246.          select="following-sibling::*[following-sibling::SS[1] = $nextSS[1] and
  247.                                       following-sibling::SS[1]/@id = $nextSS[1]/@id]"/>  
  248.         <xsl:apply-templates select="$nextSS"/>
  249.       </xsl:when>
  250.       <xsl:when test="$nextSH">
  251.         <xsl:apply-templates
  252.          select="following-sibling::*[following-sibling::SH[1] = $nextSH and
  253.                                       following-sibling::SH[1]/@id = $nextSH/@id]"/>
  254.       </xsl:when>
  255.       <xsl:otherwise>
  256.         <xsl:apply-templates select="following-sibling::*"/>
  257.       </xsl:otherwise>
  258.     </xsl:choose>
  259.   </div>
  260. </xsl:template>
  261.  
  262. <xsl:template match="TABLE">
  263.   <table><xsl:apply-templates/></table>
  264. </xsl:template>
  265.  
  266. <xsl:template match="Tag">
  267.   <span class="Tag"><xsl:apply-templates/></span>
  268. </xsl:template>
  269.  
  270. <xsl:template match="TH">
  271.   <h1>
  272.     <span class="Title">
  273.       <xsl:apply-templates select="Title/node()"/>
  274.     </span>
  275.     <span class="Section">
  276.       <xsl:text>(</xsl:text>
  277.       <xsl:apply-templates select="Section/node()"/>
  278.       <xsl:text>)</xsl:text>
  279.     </span>
  280.   </h1>
  281. </xsl:template>
  282.  
  283. <xsl:template match="UR">
  284.   <a>
  285.     <xsl:attribute name="href">
  286.       <xsl:value-of select="URI" />
  287.     </xsl:attribute>
  288.     <xsl:apply-templates/>
  289.   </a>
  290. </xsl:template>
  291.  
  292. <xsl:template match="URI"/>
  293.  
  294. <xsl:template match="UN">
  295.   <a name="text()" id="text()"/>
  296. </xsl:template>
  297.  
  298. <!-- these are all for mdoc (BSD) man page support -->
  299.  
  300. <!-- these are just printed out -->
  301. <xsl:template match="An | Dv | Er | Ev | Ic | Li | St">
  302.   <xsl:text>
  303. </xsl:text>
  304.   <xsl:apply-templates/>
  305. </xsl:template>
  306.  
  307. <!-- these are italicized -->
  308. <xsl:template match="Ad | Ar | Fa | Ot | Pa | Va | Vt">
  309.   <i><xsl:apply-templates/></i>
  310. </xsl:template>
  311.  
  312. <!-- these are bold -->
  313. <xsl:template match="Cd | Cm | Fd | Ic | Nm">
  314.   <b><xsl:apply-templates/></b>
  315. </xsl:template>
  316.  
  317. <!-- Function call - TODO need to do the ( , ) here -->
  318. <xsl:template match="Fn | Fo | Fc">
  319.   <i><xsl:apply-templates/></i>
  320. </xsl:template>
  321.  
  322. <!-- Cross reference -->
  323. <xsl:template match="Xr">
  324.   <xsl:variable name="manpage" select="substring-before(string(.), ' ')"/>
  325.   <xsl:variable name="section" select="substring-before(substring-after(string(.), ' '), ' ')"/>
  326.   <xsl:variable name="extra"   select="substring-after(substring-after(string(.), ' '), ' ')"/>
  327.   <a>
  328.     <xsl:attribute name="href">
  329.       <xsl:text>man:</xsl:text>
  330.       <xsl:value-of select="$manpage"/>
  331.       <xsl:text>(</xsl:text>
  332.       <xsl:value-of select="$section"/>
  333.       <xsl:text>)</xsl:text>
  334.     </xsl:attribute>
  335.     <xsl:value-of select="$manpage"/>
  336.     <xsl:text>(</xsl:text>
  337.     <xsl:value-of select="$section"/>
  338.     <xsl:text>)</xsl:text>
  339.   </a>
  340.   <xsl:value-of select="$extra"/>
  341. </xsl:template>
  342.  
  343. <!-- Option -->
  344. <xsl:template match="Op | Oo | Oc">
  345.   <xsl:text> [</xsl:text>
  346.   <xsl:apply-templates/>
  347.   <xsl:text>]</xsl:text>
  348. </xsl:template>
  349.  
  350. <!-- Trade or type name (small Caps). -->
  351. <xsl:template match="Tn">
  352.   <xsl:variable name="txt" select="string(child::text())"/>
  353.     <xsl:text> </xsl:text>
  354.     <xsl:value-of select="translate($txt, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
  355.   <xsl:apply-templates select="*"/>
  356. </xsl:template>
  357.  
  358. <xsl:template match="Nd">
  359.   <xsl:text> - </xsl:text>
  360.   <xsl:apply-templates />
  361. </xsl:template>
  362.  
  363. <xsl:template match="Fl">
  364.   <xsl:text>-</xsl:text>
  365.   <b><xsl:apply-templates select="child::text()"/></b>
  366.   <xsl:apply-templates select="*"/>
  367. </xsl:template>
  368.  
  369. <xsl:template match="Bl">
  370.   <dl>
  371.     <xsl:for-each select="It">
  372.       <xsl:choose>
  373.         <xsl:when test="ItTag">
  374.           <dt><xsl:apply-templates select="ItTag"/></dt>
  375.           <dd>
  376.             <xsl:apply-templates select="ItTag/following-sibling::node()"/>
  377.           </dd>
  378.         </xsl:when>
  379.         <xsl:otherwise>
  380.           <dt>
  381.             <xsl:text>ΓÇó</xsl:text>
  382.           </dt>
  383.           <dd>
  384.             <xsl:apply-templates />
  385.           </dd>
  386.         </xsl:otherwise>
  387.       </xsl:choose>
  388.     </xsl:for-each>
  389.   </dl>
  390. </xsl:template>
  391.  
  392. <xsl:template match="ItTag">
  393.   <xsl:apply-templates/>
  394. </xsl:template>
  395.  
  396. <xsl:template match="*">
  397.   <xsl:message>
  398.     <xsl:text>Unmatched element: </xsl:text>
  399.     <xsl:value-of select="local-name(.)"/>
  400.   </xsl:message>
  401.   <xsl:apply-templates/>
  402. </xsl:template>
  403.  
  404. </xsl:stylesheet>
  405.